package de.bht.fb6.mobisand.avoidlist.persistence.rest;

import java.util.List;
import org.jboss.resteasy.client.ProxyFactory;
import de.bht.fb6.mobisand.avoidlist.model.ToAvoid;

/**
 * Funktionen um mit dem WebServer zu kommunizieren.
 * 
 * @author Bruno Kirschner, Mario Dörwald
 * @since 14. Jan 2013
 */
public class ToAvoidRest {

	/**
	 * Speichert eine Liste von ToAvoids auf dem Server.
	 * 
	 * @param list
	 * 	Liste der zu speichernden ToAvoids
	 */
	public static void saveToAvoidList(final List<ToAvoid> list) {
		for (ToAvoid avoid : list) {
			ToAvoidRest.saveSingleToAvoid(avoid);
		}
	}
	
	/**
	 * Speichert ein einzelnes ToAvoid auf dem Server.
	 * 
	 * @param avoid
	 * 	ToAvoid Element das gespeichert werden soll
	 */
	public static void saveSingleToAvoid(final ToAvoid avoid) {
		try {
			/**
			 * Baut eine Verbindung zum Server auf.
			 * Als Basis dient dabei das Interface das auf beiden Seiten vorhanden ist.
			 * Der Applikation wird dabei vor gespielt einfache Methoden aufzurufen,
			 * die auf beiden Seiten bekannt sein müssen. In Wirklichkeit werden die
			 * entsprechenden Daten als JSON per REST übertragen.
			 */
			/**
			 * Damit das hier funktioniert muss der Applikation in der Manifast.xml
			 * das Recht auf Internetgewährt werden.
			 */
			IToAvoidRESTAccessor restAccessor = ProxyFactory.create(
					IToAvoidRESTAccessor.class,
					"http://10.0.2.2:8080/AvoidREST");
			
			/** Ruft die create Methode der anderen Seite auf **/
			restAccessor.create(avoid);
			
		} catch (Exception e) {
			System.out.println("Fehler beim Speichern des Avoid: "+avoid);
			e.printStackTrace();
		}
	}
	
	/**
	 * Liest ein einzelnes ToAvoid anhand seiner ID vom Server.
	 * 
	 * @param id
	 * 	ID des zu lesenden ToAvoid
	 * @return
	 * 	das ToAvoid falls es vorhanden ist
	 *  sonst null
	 */
	public static ToAvoid readSingleToAvoid(final int id) {
		ToAvoid avoid = null;
		try {
			IToAvoidRESTAccessor restAccessor = ProxyFactory.create(
					IToAvoidRESTAccessor.class,
					"http://10.0.2.2:8080/AvoidREST");

			avoid = restAccessor.read(id);
			
		} catch (Exception e) {
			System.out.println("Problem beim Laden des ToAvoid mit der ID " + id + " aufgetreten.");
			e.printStackTrace();
		}
		
		return avoid;
	}
	
	/**
	 * Liest alle ToAvoid der Serverseite aus.
	 * 
	 * @return
	 * 	Liste aller ToAvoid der Serverseite.
	 */
	public static List<ToAvoid> readAllToAvoid() {
		List<ToAvoid> toAvoidList = null;
		try {
			IToAvoidRESTAccessor restAccessor = ProxyFactory.create(
					IToAvoidRESTAccessor.class,
					"http://10.0.2.2:8080/AvoidREST");

			toAvoidList = restAccessor.readAll();
			
		} catch (Exception e) {
			System.out.println("Problem beim Laden aller ToAvoids aufgetreten. : " + e);
			e.printStackTrace();
		}
		
		return toAvoidList;
	}
}
